package com.vhall.component.service.interactive;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.vhall.component.entity.interactive.dto.QuestionAnswerNumberCacheDTO;
import com.vhall.component.entity.interactive.dto.QuestionAnswerRefCacheDTO;
import com.vhall.component.entity.interactive.vo.QuestionCountVo;
import com.vhall.component.entity.interactive.vo.QuestionListDTO;
import com.vhall.component.entity.interactive.vo.QuestionListQuery;

import java.util.List;

/**
 * 问卷缓存服务
 *
 * @author yuanzh
 * @date 2021/9/27
 */
public interface QuestionCacheService {

    /**
     * 获取观看端缓存hashKey
     *
     * @param req 查询请求参数
     * @return hashKey
     */
    String getWatchSideHashKey(QuestionListQuery req);

    /**
     * 缓存观看端房间问卷
     *
     * @param roomId   房间id
     * @param hashKey  哈希key，查询参数base64处理
     * @param pageData 分页数据
     */
    void cacheWatchSideQuestionData(String roomId, String hashKey, Page<QuestionListDTO> pageData);

    /**
     * 获取缓存的观看端房间问卷
     *
     * @param roomId  房间id
     * @param hashKey 哈希key
     * @return 分页数据
     */
    Page<QuestionListDTO> getCachedData(String roomId, String hashKey);

    /**
     * 删除房间已缓存的问卷详细信息
     *
     * @param roomId 房间id
     */
    void deleteCachedQuestionDetailData(String roomId);

    /**
     * 获取问卷回答次数缓存key
     *
     * @param roomId 房间id
     * @return 缓存key
     */
    String getQuestionAnswerNumberCacheKey(String roomId);

    /**
     * 缓存问卷回答次数
     *
     * @param roomId    房间id
     * @param cacheList 缓存数据列表
     */
    void cacheQuestionAnswerNumber(String roomId, List<QuestionAnswerNumberCacheDTO> cacheList);

    /**
     * 删除房间已缓存的用户答卷QA关系
     *
     * @param roomId    房间id
     * @param accountId 用户id
     */
    void deleteCachedQuestionAnswerRef(String roomId, String accountId);

    /**
     * 获取用户答卷QA关系缓存key
     *
     * @param roomId 房间id
     * @return 缓存key
     */
    String getUserQuestionAnswerRefCacheKey(String roomId);

    /**
     * 缓存用户答卷QA关系，即回答问卷
     *
     * @param roomId    房间id
     * @param accountId 用户id
     * @param cacheList 缓存数据列表
     */
    void cacheUserQuestionAnswerRef(String roomId, Integer accountId, List<QuestionAnswerRefCacheDTO> cacheList);

    /**
     * 查询缓存的问卷回答次数统计数据
     *
     * @param roomId      房间id
     * @param questionIds 问卷id集合
     * @return 问卷回答次数统计数据
     */
    List<QuestionCountVo> listCachedQuestionAnswerNumber(String roomId, List<Integer> questionIds);

    /**
     * 查询缓存的问卷回答关联数据
     *
     * @param roomId      房间id
     * @param accountId   用户id
     * @param questionIds 问卷id集合
     * @return 问卷回答关联数据
     */
    List<QuestionCountVo> listCachedQuestionAnswerRef(String roomId, Integer accountId, List<Integer> questionIds);

}
